// Copyright Epic Games, Inc. All Rights Reserved.

#include "LyraGameViewportClient.h"

#include "CommonUISettings.h"
#include "ICommonUIModule.h"

#include UE_INLINE_GENERATED_CPP_BY_NAME(LyraGameViewportClient)

class UGameInstance;

namespace GameViewportTags // 游戏视口标签命名空间
{
	UE_DEFINE_GAMEPLAY_TAG_STATIC(TAG_Platform_Trait_Input_HardwareCursor, "Platform.Trait.Input.HardwareCursor"); // 定义平台特性标签：硬件光标
}

/**
 * 构造函数
 */
ULyraGameViewportClient::ULyraGameViewportClient()
	: Super(FObjectInitializer::Get()) // 调用父类构造函数
{
}

/**
 * 初始化游戏视口客户端
 * 根据平台特性设置是否使用软件光标
 * @param WorldContext 世界上下文
 * @param OwningGameInstance 所属游戏实例
 * @param bCreateNewAudioDevice 是否创建新的音频设备
 */
void ULyraGameViewportClient::Init(struct FWorldContext& WorldContext, UGameInstance* OwningGameInstance, bool bCreateNewAudioDevice)
{
	Super::Init(WorldContext, OwningGameInstance, bCreateNewAudioDevice); // 调用父类初始化方法
	
	// 我们在项目设置中为控制台/移动设备设置了软件光标，但在桌面上我们使用标准硬件光标即可
	const bool UseHardwareCursor = ICommonUIModule::GetSettings().GetPlatformTraits().HasTag(GameViewportTags::TAG_Platform_Trait_Input_HardwareCursor); // 检查平台是否支持硬件光标特性
	SetUseSoftwareCursorWidgets(!UseHardwareCursor); // 根据硬件光标支持情况设置是否使用软件光标
}